package com.ruoyi.service;

import com.ruoyi.domain.PaymentRequest;
import com.stripe.exception.StripeException;
import com.stripe.model.Refund;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

public interface PaymentService {
    /**
     * 创建支付意图
     *
     * @param currency          货币类型（如 "usd", "cny"）
     * @param amount            支付金额（单位为最小货币单位：分）
     * @param paymentRequest    支付请求参数对象
     * @return 客户端秘钥 (clientSecret)
     * @throws StripeException Stripe SDK 异常
     */
    public String createPaymentIntent(String currency, long amount,String paymentMethodType, PaymentRequest paymentRequest) throws StripeException ;

        /**
         * 创建支付意图并处理支付
         *
         * @param currency          货币类型（如 "usd", "cny"）
         * @param amount            支付金额（单位为最小货币单位：分）
         * @param paymentMethodType 支付方式类型（如 "card"）
         * @param paymentDetails    支付方式详情（如信用卡信息）
         * @param paymentRequest    支付请求参数对象
         * @return 客户端秘钥 (clientSecret)
         * @throws StripeException Stripe SDK 异常
         */
    public String createAndConfirmPaymentIntent(String currency, long amount, String paymentMethodType,
                                                Map<String, Object> paymentDetails, PaymentRequest paymentRequest)
            throws StripeException;

    /**
     * 创建退款
     *
     * @param paymentIntentId 支付意图的 ID
     * @param amount          退款金额（单位为最小货币单位：分），传 null 全额退款
     * @return Refund 对象
     */
    public Refund createRefund(String paymentIntentId, Long amount) throws StripeException;

    /**
     * 处理 Stripe Webhook 事件
     *
     * @param request HTTP 请求对象
     * @return Webhook 处理结果
     */
    public String handleStripeWebhook(HttpServletRequest request);
}
